package fenetres;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Vector;

import javax.imageio.ImageIO;
import javax.swing.*;
import modeles.*;


import controles.*;





public class UpdateSupplierFrame extends JInternalFrame implements ActionListener
{
	JPanel entetePanel, panel1,panel2,panel3;
	JTabbedPane tabbedPane ;
	public JTextField codeTxt,nomTxt,adresseTxt,telTxt;
	public JButton AnnulerButton,modifBut;
	public String nomVendeur, adresseVendeur, telVendeur;
	
	public JTable produitTable;
	public GenericTableModel tableModel;
	String [] titreTable = {"Code Produit","Produit","Categorie","Prix"};
	public JButton supprBut,ajoutBut,validerBut,annulerBut,validerProdBut,annulerProdBut;
	public Vector<Produit> listProduitsBase;
	//Vector<InfoProduit> listProduitStock;
	
	public JTextField codeProdTxt,prixTxt;
	//Vector<InfoProduit> listeProduit;
	public JComboBox nomCombo,categCombo;
	public Fournisseur oFrs;
	Utilisateur userConnected;
	public Vector<Categorie> listCateg;
	public Vector<InfoProduit> listProduitSelected;
	
	public UpdateSupplierFrame (Utilisateur _userConnected, Fournisseur _oFournisseur)
	{
		super("Mise a jour Fournisseur",
	              false, //resizable
	              true, //closable
	              false, //maximizable
	              false);//iconifiable
		oFrs = _oFournisseur;
		userConnected = _userConnected;
		listProduitSelected = new Vector<InfoProduit>();
		boolean accept = checkUserConnected();
		if (accept){
			setSize(700,630);
			setLocation(30,20);
			//elaboration de l'entete
			entetePanel = new JPanel ();
			entetePanel.setLayout(null);
			
			tableModel = new GenericTableModel(titreTable);
			
			JLabel titleLabel = new javax.swing.JLabel("Mise a jour des services Fournisseur ");
			//titleLabel.setFont(new java.awt.Font("Lucida Grande", 0, 16));
			titleLabel.setFont(new java.awt.Font("Century Schoolbook L", java.awt.Font.ITALIC, 24));
			titleLabel.setForeground(Color.BLUE);
			entetePanel.add(titleLabel);
			titleLabel.setBounds(120,20,400,25);
			entetePanel.setBounds(0,0,700,70);
			this.getContentPane().setLayout(null);
			this.getContentPane().add(entetePanel);
			//updateListeProd (oVendeur);
			//updateInitialDataTable();
			creerOnglet();
			updateListeProd ();
			
					
			this.getContentPane().add(tabbedPane);
			this.setVisible(true);
		}
	}
	
	public boolean checkUserConnected(){
		//userConnected = accueil.authent.getUserConnected();
		if( userConnected == null){
			JOptionPane.showMessageDialog(null, "Aucun utilisateur connecte!! \n Veuillez connecter svp :) ","Erreur",JOptionPane.ERROR_MESSAGE);
			this.dispose();
			return false;
		}
		else {
			return true;
		}
	}
	
	public void creerOnglet(){
		tabbedPane = new JTabbedPane();
		tabbedPane.setBounds(0,70,700,530);
		
		panel1 = new JPanel ();
		panel2 = new JPanel ();
		panel3 = new JPanel ();
		
		panel1.setBounds(0,70,700,530);
		panel2.setBounds(0,70,700,530);
		panel3.setBounds(0,70,700,530);
		
		updateProfil();
		//updateListeProd(oFrsSelect);
		
		
		tabbedPane.addTab("Profil", null, panel1,
		                  "Does nothing");
		 
		tabbedPane.addTab("Produits", null, panel2,
		                  "Does twice as much nothing");

	}
	
	public void updateProfil(){
		JPanel infoPanel = new JPanel();
		infoPanel.setLayout(null);
		infoPanel.setBounds(0,30,350,400);
		infoPanel.setBackground(Color.LIGHT_GRAY);
		JLabel piclabel1 = new JLabel();
		JLabel piclabel2 = new JLabel();
		
		try {
			BufferedImage picture1 = ImageIO.read(new File("images/frs1.png"));
			piclabel1 = new JLabel (new ImageIcon(picture1));
			BufferedImage picture2 = ImageIO.read(new File("images/frs2.png"));
			piclabel2 = new JLabel (new ImageIcon(picture2));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			
			e.printStackTrace();
		}
		
		JLabel enteteProfLab = new JLabel ("Informations sur le vendeur");
		enteteProfLab.setFont(new java.awt.Font("Century Schoolbook L", java.awt.Font.BOLD, 18));
		enteteProfLab.setForeground(Color.DARK_GRAY);
		JLabel codeLab = new JLabel ("Code:");
		codeTxt= new JTextField ();
		codeTxt.setEditable(false);
		codeTxt.setText(oFrs.getFourn_code());
		
		JLabel nomLab = new JLabel ("Nom:");
		nomTxt= new JTextField ();
		nomTxt.setText(oFrs.getFourn_nom());
		
		JLabel adresseLab = new JLabel ("Adresse:");
		adresseTxt= new JTextField ();
		adresseTxt.setText(oFrs.getFourn_adresse());
		
		JLabel telLab = new JLabel ("Tél:");
		telTxt= new JTextField ();
		telTxt.setText(oFrs.getFourn_tel());
		
		modifBut=new JButton("Mettre a jour");
		modifBut.addActionListener(this);
		modifBut.addActionListener(new UpdateFrsAction(this));

		
		AnnulerButton=new JButton("Annuler");
		AnnulerButton.addActionListener(this);
		AnnulerButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				nomTxt.setText("");
				adresseTxt= new JTextField ("");
				telTxt= new JTextField ("");
			}
		});
		panel1.setLayout(null);
		
		
		infoPanel.add(enteteProfLab);
		panel1.add(piclabel1);
		panel1.add(piclabel2);
		infoPanel.add(codeLab);
		infoPanel.add(codeTxt);
		infoPanel.add(nomLab);
		infoPanel.add(nomTxt);
		infoPanel.add(adresseLab);
		infoPanel.add(adresseTxt);
		infoPanel.add(telLab);
		infoPanel.add(telTxt);
		
		infoPanel.add(modifBut);
		infoPanel.add(AnnulerButton);
		panel1.add(infoPanel);
		
		enteteProfLab.setBounds(40,10,300,30);
		
		piclabel1.setBounds(380,10,250,190);
		piclabel2.setBounds(380,220,240,220);
		codeLab.setBounds(15,70,80,30);
		codeTxt.setBounds(100,70,200,30);
		nomLab.setBounds(15,120,80,30);
		nomTxt.setBounds(100,120,200,30);
		adresseLab.setBounds(15,170,80,30);
		adresseTxt.setBounds(100,170,200,30);
		telLab.setBounds(15,220,80,30);
		telTxt.setBounds(100,220,200,30);
		modifBut.setBounds(20,330,120,30);
		AnnulerButton.setBounds(170,330,120,30);
		
	}
	public void updateProduit(){
		JLabel enteteProfLab = new JLabel ("Liste des produits offerts par "+oFrs.getFourn_nom());
	}
	public Vector <Produit> listeProduits(){
		DBManager dbManager =  new DBManager ();
		Vector<Produit> oVectListProduit = new Vector<Produit> ();
		//oVectListProduit = dbManager.getListProduct();
		Produit oProduit = new Produit ();
		oVectListProduit = oProduit.getListProduct(dbManager);
		return oVectListProduit;
	}
	
	public void updateInitialDataTable(){
		DBManager dbManager = new DBManager();
		listProduitSelected = oFrs.getListProduitFrs(dbManager);
		
		if(listProduitSelected.size()>0)
		{
			
			for(int i=0; i<listProduitSelected.size();i++){
				tableModel.addNewRow();
				InfoProduit oInfoProduit = listProduitSelected.get(i);
				
				Produit oProduit = new Produit ();
				oProduit.setProduit_id(oInfoProduit.getProduit_id());
				oProduit = oProduit.findProductById(dbManager);
				
				oInfoProduit.setProduit_code(oProduit.getCodeProd());
				oInfoProduit.setProduit_libelle(oProduit.getProduit_libelle());
				oInfoProduit.setCateg_libelle(oProduit.getCateg_libelle());
				
				tableModel.setValueAt(oInfoProduit.getProduit_code(), i, 0);
				tableModel.setValueAt(oInfoProduit.getProduit_libelle(), i, 1);
				tableModel.setValueAt(oInfoProduit.getCateg_libelle(), i, 2);
				tableModel.setValueAt(oInfoProduit.getPrix_achat(), i, 3);
			}
			tableModel.fireTableDataChanged();
		}
	}
	
	 public void updateListeProd(){
		 JLabel entete = new JLabel ("Liste des produits offerts");
		 entete.setFont(new java.awt.Font("Century Schoolbook L", java.awt.Font.BOLD, 16));
		 entete.setForeground(Color.DARK_GRAY);
		 entete.setBounds(5,5,200,30);
		 
		 tableModel = new GenericTableModel(titreTable);
		 produitTable = new JTable ();
		 produitTable.setModel(tableModel);
		 produitTable.setOpaque(false);
		 produitTable.setRowHeight(25);
		 produitTable.setGridColor(Color.darkGray);
		 produitTable.setShowGrid(true);
		 
		 JScrollPane scroll = new JScrollPane(produitTable);
		 scroll.setBounds(5,45,400, 200);
		 supprBut = new JButton("Supprimer");
		 supprBut.setBounds(410,60,120,30);
		 supprBut.addActionListener(new UpdateFrsAction(this));
		 //ajout produit
		 JLabel ajoutLab = new JLabel ("Ajout Produit");
		 ajoutLab.setFont(new java.awt.Font("Century Schoolbook L", java.awt.Font.BOLD, 16));
		 ajoutLab.setForeground(Color.BLACK);
		 
		 JLabel nomLab = new JLabel ("Nom :");
		 listProduitsBase = listeProduits();
		 String [] listProduitTab = new String[listProduitsBase.size()];
		 for (int iIndex = 0 ; iIndex < listProduitsBase.size(); iIndex++)
		{
			 Produit oProduit = listProduitsBase.get(iIndex);
			 listProduitTab [iIndex] = oProduit.getProduit_libelle();
		}
		 nomCombo = new JComboBox (listProduitTab);
		 nomCombo.addActionListener(new UpdateFrsAction(this));
		
		 JLabel codeProdLab = new JLabel ("Code :");
		 codeProdTxt = new JTextField ();
		 codeProdTxt.setEditable(false);
		 
		//chargemenr des categories dans la base de donnees
			DBManager dbManager = new DBManager();
			Produit oProd = new Produit();
			 listCateg = oProd.getListCategory(dbManager);
			String[] categorieTab = new String [listCateg.size()+1];
			int i;
			for( i=0; i<listCateg.size() ; i++){
				Categorie categorie = listCateg.get(i);
				categorieTab[i] = categorie.getLibelle();
			}
			categorieTab[i] = "Tous";
		 JLabel categLab = new JLabel ("Categorie :");
		 categCombo = new JComboBox (categorieTab);
		 categCombo.setSelectedItem("Tous");
		 categCombo.addActionListener(new UpdateFrsAction(this));
		 
		 JLabel prixLab = new JLabel ("Prix :");
		 prixTxt = new JTextField ();
		 ajoutBut = new JButton("Ajouter");
		 ajoutBut.addActionListener(new UpdateFrsAction(this));
		 validerProdBut = new JButton("Mettre à jour");
		 validerProdBut.addActionListener(new UpdateFrsAction(this));
		 annulerProdBut = new JButton("Annuler");
		 annulerProdBut.addActionListener(new UpdateFrsAction(this));
		 
		 //panel d'ajout de produit
		 JPanel panel3 = new JPanel();
		 panel3.setLayout(null);
		 panel3.setBounds(0,280,700,150);
		 
		 panel2.setLayout(null);
		 panel2.add(entete);
		 panel2.add(scroll);
		 panel2.add(supprBut);
		 panel3.add(ajoutLab);
		 panel3.add(nomLab);
		 panel3.add(nomCombo);
		 panel3.add(codeProdLab);
		 panel3.add(codeProdTxt);
		 panel3.add(categLab);
		 panel3.add(categCombo);
		 panel3.add(prixLab);
		 panel3.add(prixTxt);
		 panel3.add(ajoutBut);
		 panel2.add(validerProdBut);
		 panel2.add(annulerProdBut);
		 panel3.setOpaque(true);
		 panel3.setBackground(Color.LIGHT_GRAY);
		 panel2.add(panel3);
		 
		 validerProdBut.setBounds(170,450,150,30);
		 annulerProdBut.setBounds(400,450,150,30);
		 ajoutLab.setBounds(155,10,180,30);
		 nomLab.setBounds(5,50,80,30);
		 nomCombo.setBounds(90,50,200,30);
		 categLab.setBounds(350,50,80,30);
		 categCombo.setBounds(435,50,150,30);
		 codeProdLab.setBounds(5,90,150,30);
		 codeProdTxt.setBounds(90,90,150,30);
		 prixLab.setBounds(350,90,150,30);
		 prixTxt.setBounds(435,90,150,30);
		 ajoutBut.setBounds(500,5,120,30);
		 updateInitialDataTable();
	 }

		@Override
		public void actionPerformed(ActionEvent e) {
			/*if (e.getSource() == categCombo){
				int indiceSelected = categCombo.getSelectedIndex();
				Produit oProd = new Produit();
				DBManager dbManager  = new DBManager ();
				if(indiceSelected == (listCateg.size())) {
					
					listProduitsBase = oProd.getListProduct(dbManager);//Tous selectionnes
				}
				else{
					oProd.setCateg_id(indiceSelected);
					listProduitsBase = oProd.getListProduct(dbManager);
				}
				
				 String [] listProduitTab = new String[listProduitsBase.size()];
				 for (int iIndex = 0 ; iIndex < listProduitsBase.size(); iIndex++)
				{
					 Produit oProduit = listProduitsBase.get(iIndex);
					 listProduitTab [iIndex] = oProduit.getProduit_libelle();
				}
				 //nomCombo.
				 
			}
			if(e.getSource() == nomCombo){
				int indiceSelected = nomCombo.getSelectedIndex();
				Produit oProduit = listProduitsBase.get(indiceSelected);
				codeProdTxt.setText(oProduit.getCodeProd());
			}
			if (e.getSource() == ajoutBut){
				int iLigne = tableModel.getRowCount();
				//tableModel.addNewRow();
				String nomProduit = nomCombo.getSelectedItem().toString();
				String codeProd = codeProdTxt.getText();
				
				DBManager dbManager = new DBManager ();
				Produit oProduit = new Produit();
				oProduit.setCodeProd(codeProd);
				
				oProduit = oProduit.findProductByCode(dbManager);
					//if(!nomProduit.isEmpty()){
					InfoProduit oInfoProduit = new InfoProduit();
					oInfoProduit.setProduit_code(codeProdTxt.getText());
					oInfoProduit.setFourn_code(codeTxt.getText());//code fournisseur dans l'onglet profil
					oInfoProduit.setProduit_libelle(oProduit.getProduit_libelle());
					oInfoProduit.setCateg_libelle(oProduit.getCateg_libelle());
					oInfoProduit.setPrix_achat(Integer.valueOf(prixTxt.getText()));
					
					listProduitSelected.add(oInfoProduit);*/
					//tableModel.setValueAt(nomProduit, iLigne, 0);
//					tableModel.setValueAt(null, iLigne, 0);
//					tableModel.setValueAt(minTxt.getText(), iLigne, 1);
//					tableModel.setValueAt(maxTxt.getText(), iLigne, 2);
//					tableModel.setValueAt(qteTxt.getText(), iLigne, 3);
					//updateTable();
					
				//}
				
				
			//}
			/*if (e.getSource() == supprBut){
				int irowSelected = produitTable.getSelectedRow () ;
				if (irowSelected == -1)
				{
					JOptionPane.showMessageDialog (this, "Veuillez selectionner le produit Ã  supprimer !", "E-commerce", JOptionPane.WARNING_MESSAGE) ;
				}
				else
				{
					listProduitStock.remove(irowSelected);
					updateTable();
//					System.out.println(irowSelected);
//					produitTable.remove(irowSelected);
//					tableModel.fireTableDataChanged();
				}
				
			}
			
			if (e.getSource() == validerBut1){
				boolean bRes = false;
				//mise a jour du stock
				DBManager dbManager =  new DBManager();
				dbManager.deleteAllStock(oVendeur.getIdVendeur());
				
				for(int i=0; i<listProduitStock.size();i++){
					DBManager dbManager1 =  new DBManager();
					InfoProduit oInfoProduit =  listProduitStock.get(i);
					Produit oProduit = dbManager1.getProductByName(oInfoProduit.getNom());
					DBManager dbManager2 =  new DBManager();
					oInfoProduit.setIdProduit(oProduit.idProduit);
					 bRes = dbManager2.editStock(oInfoProduit, oVendeur.getIdVendeur());
				}
				
				if(bRes)JOptionPane.showMessageDialog(null, "Mise a jour stock reussie","Message",JOptionPane.INFORMATION_MESSAGE);
			}*/
			
		}
		
		public void updateTable(){
			tableModel.removeAllRows();
			if(listProduitSelected.size()>0)
			{
				for(int i=0; i<listProduitSelected.size();i++){
					tableModel.addNewRow();
					InfoProduit oInfoProduit = listProduitSelected.get(i);
					//tableModel.setValueAt(nomProduit, iLigne, 0);
					tableModel.setValueAt(oInfoProduit.getProduit_code(), i, 0);
					tableModel.setValueAt(oInfoProduit.getProduit_libelle(), i, 1);
					tableModel.setValueAt(oInfoProduit.getCateg_libelle(), i, 2);
					tableModel.setValueAt(oInfoProduit.getPrix_achat(), i, 3);
				}
			}
			tableModel.fireTableDataChanged();
		}
}